/*
 * @Description:
 * @Version: V1.0.0
 * @Author: 周艳凯 750419898@qq.com
 * @Date: 2024-05-08 17:22:26
 * @LastEditors: 周艳凯 484894717@qq.com
 * @LastEditTime: 2024-10-09 10:57:15
 * @FilePath: is.ts
 * Copyright 2024 Marvin, All Rights Reserved.
 * 2024-05-08 17:22:26
 */
const opt = Object.prototype.toString;

export function isArray(obj: any): obj is any[] {
  return opt.call(obj) === "[object Array]";
}

export function isObject(obj: any): obj is { [key: string]: any } {
  return opt.call(obj) === "[object Object]";
}

export function isString(obj: any): obj is string {
  return opt.call(obj) === "[object String]";
}

export function isNumber(obj: any): obj is number {
  return opt.call(obj) === "[object Number]" && obj === obj;
}

export function isRegExp(obj: any) {
  return opt.call(obj) === "[object RegExp]";
}

export function isFile(obj: any): obj is File {
  return opt.call(obj) === "[object File]";
}

export function isBlob(obj: any): obj is Blob {
  return opt.call(obj) === "[object Blob]";
}

export function isUndefined(obj: any): obj is undefined {
  return obj === undefined;
}

export function isNull(obj: any): obj is null {
  return obj === null;
}

export function isFunction(obj: any): obj is (...args: any[]) => any {
  return typeof obj === "function";
}

export function isEmptyObject(obj: any): boolean {
  return isObject(obj) && Object.keys(obj).length === 0;
}

export function isExist(obj: any): boolean {
  return obj || obj === 0;
}

export function isWindow(el: any): el is Window {
  return el === window;
}

export function isPromise(obj: any) {
  return (
    !!obj && // 确保对象不是null或undefined
    (typeof obj === "object" || typeof obj === "function") && // 是对象或函数
    typeof obj.then === "function" // 具有then方法
  );
}

export function isBoolean(value: any) {
  return typeof value === "boolean";
}
/**
 *  非空判断
 * @param value
 * @returns
 */
export function isNotEmpty(value: any) {
  return (
    value !== null &&
    value !== undefined &&
    value !== "" &&
    value !== 0 &&
    !Number.isNaN(value) &&
    value !== false
  );
}
